package s02;

/**
 * @ClassName SellTicket
 * @Description 使用同步代码块解决
 * @Author Li
 * @Date 2022/8/8 9:59
 * @ModifyDate 2022/8/8 9:59
 * @Version 1.0
 */
public class SellTicket implements Runnable {
    // 模拟100张票
    private int tickets = 100;

    Object obj = new Object();

    /**
     * 执行卖票操作
     */
    @Override
    public void run() {
        // 每个窗口的卖票操作
        // 窗口永远开启
        while (true) {
            // 使用sleep模拟一下卖票前操作
            try {
                Thread.sleep(5);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            // 将对票进行的操作加入到同步代码块中
            synchronized (obj) {
                // 当有票的时候
                if (tickets > 0) {
                    // 出票操作
                    // 获取当前线程名称
                    String name = Thread.currentThread().getName();
                    System.out.println(name + "正在卖第" + tickets + "张票");
                    tickets--;
                }
            }
        }
    }
}
